#include "comm.h"
#include "appconfig.h"

void uint16_to_str(u16_t value,u8_t *str)
{
	str[0] = (value & 0xff00)>>8;
	str[1] = (value & 0x00ff);
}

void uint32_to_str(u32_t value,u8_t *str)
{
	str[0] = (value & 0xff000000)>>24;
	str[1] = (value & 0x00ff0000)>>16;
	str[2] = (value & 0x0000ff00)>>8;
	str[3] = (value & 0x000000ff);
}

u16_t str_to_uint16(u8_t *str)
{
	u16_t value = 0;

	value = str[0];
	value <<= 8;
	value |= str[1];

	return value;
}

u32_t str_to_uint32(u8_t *str)
{
	u32_t value = 0;

	value = str[0];
	value <<= 8;
	value |= str[1];
	value <<= 8;
	value |= str[2];
	value <<= 8;
	value |= str[3];

	return value;
}


void show_hex_string(u8_t *str,u16_t size)
{
#ifndef RemovDebugCode
	u16_t i;

	if(size > 200)
	{
		printf("<<< ......\r\n");
		return ;
	}
	for(i=0;i<size;i++)
	{
		//printf("\033[1m\033[40;33m%X \033[0m",str[i]);
		printf("%X ",str[i]);
	}
	printf("\n");
#endif
}

void show_int_string(u8_t *str,u16_t size)
{
#ifndef RemovDebugCode
	u16_t i;

	for(i=0;i<size;i++)
	{
		printf("%d ",str[i]);
	}
	printf("\n");
#endif
}

void sys_reboot(void)
{
	system_restart(); //系统重启
}


u16_t net_crc16(u8_t *buf, u16_t len)
{
		u8_t j;
		u16_t i;
		u16_t a=0xffff;
		u16_t b=0xa001;
		
		for(i=0; i<len; i++)
		{
			a ^= buf[i];
			for(j=0;j<8;j++)
			{
				u16_t last;
				last = a % 2;
				a >>= 1;
				if(last == 1)
				{
					a ^= b;
				}
			}
		}
    return a;
}

u8_t getEvtEmptyPos(u16_t *evt,u8_t size)
{
	u8_t i;

	for(i=0;i<size;i++)
	{
		if(evt[i] == 0)
		{
			return i;
		}
	}
	return i;
}

STATUS sendEvtProcess(u16_t *evt,u8_t size,u16_t value)
{
	u8_t i;

	i = getEvtEmptyPos(evt, size);
	if(i == size)//列队已满
	{
		return FAIL;
	}

	evt[i] = value;
	return OK;
}



u16_t EvtRecvProcess(u16_t *evt,u8_t size)
{
	u8_t i;
	u16_t result;

	if(evt[0] == 0)
	{
		return 0;
	}
	else
	{
		result = evt[0];
	}

	evt[0] = 0;
	for(i=0;i<size-1;i++)
	{
		evt[i] ^= evt[i+1];
		evt[i+1] ^= evt[i];
		evt[i] ^= evt[i+1];
	}

	return result;
}



